package edu.object_oriented.abstractPra;

/**
 * abstract  抽象   类 以及 方法
 *      类： 抽象类    具有普通类所有的特性   还可以具有抽象方法
 *              只能作为父类  被 继承
 *      方法： 抽象方法    只能在抽象类  或 接口中书写
 *              子类需要 重写 父类中的抽象方法
 */
public abstract class Car {

    String color;
    double oil;

    void run(){
        System.out.println("跑的快");
    }
    //抽象方法   默认没有方法体   只定义了方法格式的约束
    abstract void work();
}

class Bus extends Car{
    //子类重写  父类 的抽象方法
    @Override
    void work() {
        System.out.println("work");
    }
}
class TestAbstract{
    public static void main(String[] args) {
        //抽象类 类型的引用  指向  具体的子类对象  推荐
        Car car = new Bus();
        car.work();
        //实例化  一个 抽象类时   可以直接重写抽象方法   不推荐
        Car car1 = new Car() {
            @Override
            void work() {
                System.out.println("实例化抽象类Car时重写work");
            }
        };
    }
}



